import { getAction, postAction } from '../controller';

export interface PayOrderSubmitReqVO {
  /**
   * 支付渠道
   */
  channelCode: string
  /**
   * 支付渠道的额外参数，例如说，微信公众号需要传递 openid 参数
   */
  channelExtras?: Record<string, any>
  /**
   * 展示模式
   */
  displayMode?: string
  /**
   * 支付单编号
   */
  id: number
  /**
   * 回跳地址
   */
  returnUrl?: string
}

export interface PayOrderSubmitRespVO {
  /**
   * 展示内容
   */
  displayContent?: string
  /**
   * 展示模式
   */
  displayMode?: string
  /**
   * 支付状态
   */
  status?: number
}

export interface PayOrderRespVO {
  /**
   * 应用编号
   */
  appId: number
  /**
   * 商品描述
   */
  body: string
  /**
   * 渠道编码
   */
  channelCode?: string
  /**
   * 渠道手续金额，单位：分
   */
  channelFeePrice?: number
  /**
   * 渠道手续费，单位：百分比
   */
  channelFeeRate?: number
  /**
   * 渠道编号
   */
  channelId?: number
  /**
   * 渠道订单号
   */
  channelOrderNo?: string
  /**
   * 渠道用户编号
   */
  channelUserId?: string
  /**
   * 创建时间
   */
  createTime?: string
  /**
   * 订单失效时间
   */
  expireTime: string
  /**
   * 支付成功的订单拓展单编号
   */
  extensionId?: number
  /**
   * 支付订单编号
   */
  id?: number
  /**
   * 商户订单编号
   */
  merchantOrderId: string
  /**
   * 支付订单号
   */
  no?: string
  /**
   * 异步通知地址
   */
  notifyUrl: string
  /**
   * 支付金额，单位：分
   */
  price: number
  /**
   * 退款总金额，单位：分
   */
  refundPrice: number
  /**
   * 支付状态
   */
  status: number
  /**
   * 商品标题
   */
  subject: string
  /**
   * 订单支付成功时间
   */
  successTime?: string
  /**
   * 用户 IP
   */
  userIp: string
}
export interface SmilePayReqVO {
  /**
   * ftoken
   */
  ftoken?: string
  /**
   * 支付单编号
   */
  id: number
}

export const PayApi = {
  /**
   * 提交支付订单
   * @param data
   * @returns
   */
  submit: (data: PayOrderSubmitReqVO) => {
    return postAction<PayOrderSubmitRespVO>('/pay/order/submit', data);
  },
  /**
   * 查询支付订单状态
   * @param id 订单id
   * @returns
   */
  getStatus: (id: number) => {
    return getAction<PayOrderRespVO>('/pay/order/get', { id, sync: true });
  },

  /**
   * 人脸支付
   * @param data
   * @returns
   */
  smilePay: (data: SmilePayReqVO) => {
    return postAction<PayOrderSubmitRespVO>('/pay/smilePay/pay', data);
  }
};
